import java.util.HashMap;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Lily
 * Date: 2024-09-21
 * Time: 13:57
 */
public class find_MaxLength {
    /*
    * 给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组，并返回该子数组的长度。
    * 提示：
    * 1 <= nums.length <= 105
    * nums[i] 不是 0 就是 1
    * */
    public static int findMaxLength(int[] nums) {

        //暴力解法
        //表示当前的至此的0和1的数量
        //双数组一个记录0个数，一个记录1个数

        //如果当前的数组的前缀和是长度的两倍0和1，一定符合要求。
        int ret=0;
        int sum=0;
        HashMap<Integer,Integer> hash=new HashMap<>();
        hash.put(0,-1);
        for (int i = 0; i < nums.length; i++) {

            sum+= nums[i]==0 ? -1 : 1;
            if(hash.containsKey(sum)) ret = Math.max(ret, i - hash.get(sum));
            else hash.put(sum, i);
        }
        return ret;
    }
}
